home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-03-15 | 1.8 KB | 105 lines | [TEXT/MWPS] |
- unit MyProc;
-
- interface
-
- uses
- LSInterface;
-
- {$MAIN}
- procedure proc (var blk: LSBlock);
-
- implementation
-
- function SetCurrentA4: longint; C;
-
- {the linker doesn't want to find SetA4 (why?) so I copy it here}
- function SetA4 (newA4: longint) : longint; ASM;
- begin
- move.l 4(a7),d0
- exg d0,a4
- move.l d0,8(a7)
- move.l (a7)+,(a7)
- rts
- end;
-
-
-
-
- const
- CLASSNAME = 'MyProc';
- PICTID = 128;
-
- type
- ClassDatasRec = record
- pic: PicHandle;
- end;
- ClassDatasP = ^ClassDatasRec;
- ClassDatasH = ^ClassDatasP;
-
- procedure DoNewClass (var blk: LSBlock);
- var
- h: Handle;
- err: OSErr;
- begin
- blk.prm.prmClass^.name := CLASSNAME;
- h := GetResource('PICT', PICTID);
- HNoPurge(h); DetachResource(h);
- blk.prm.prmClass^.image := Pointer(h);
- SetClassID(blk.prm.prmClass^.id, CLASSNAME);
-
- LSDeclarePin(blk.env, blk.classRef, Pnt(0,5), kInputPin, 'in1');
- LSDeclarePin(blk.env, blk.classRef, Pnt(0,15), kInputPin, 'in2');
- LSDeclarePin(blk.env, blk.classRef, Pnt(50,10), kOutputPin, 'out');
-
- SetHandleSize(Handle(blk.classDatas), sizeof(ClassDatasRec));
- err := HandToHand(h);
- ClassDatasH(blk.classDatas)^^.pic := Pointer(h);
- end;
-
-
- procedure DoDraw (var blk: LSBlock);
- begin
- DrawPicture(ClassDatasH(blk.classDatas)^^.pic, blk.prm.prmItem^.frame);
- end;
-
- procedure DoSimulation (var blk: LSBlock);
- var
- in1, in2, out: XBool;
- begin
- LSGetInput(blk.env, blk.gateRef, 1, in1);
- LSGetInput(blk.env, blk.gateRef, 2, in2);
- out := _AND(in1, in2);
- LSSetOutput(blk.env, blk.gateRef, 3, out);
- end;
-
-
-
-
- procedure proc (var blk: LSBlock);
- var
- oldA4: longint;
- begin
-
- oldA4 := SetCurrentA4;
-
- case blk.msg of
-
- msgNewClass:
- DoNewClass(blk);
-
- msgDisposeClass:
- DisposeHandle(Handle(ClassDatasH(blk.classDatas)^^.pic));
-
- msgDraw:
- DoDraw(blk);
-
- msgSimulation:
- DoSimulation(blk);
-
- end;
-
- oldA4 := SetA4(oldA4);
- end;
-
-
- end.